# 列表的插入
# a = [1,2,3,4,5,6,7,8,9,10]
# a.append('qqqqq')
# a.append('wwwww')
# print(a)

# a = [1,2,3,4,5]
# a.insert(1,100)
# print(a)
# #插入位置的下标比元素下标还大，直接插入在末尾
# a.insert(100,'hello')
# print(a)


# 列表查找
# 1.使用 in 来判断某个元素是否在列表中
# a = [1,2,3,4,5,6,7,8,9,10]
# print(1 in a)
# print(100 in a)
# print(10 not in a)

# 2.使用 index 方法，来判定，当前元素在列表中的位置，返回元素 下标
# a = [1,2,3,4,5,6,7,8,9,10]
# print(a.index(2))
# # 元素不存在，运行报错
# # print(a.index(100))

#列表删除
# a = [1,2,3,4,5,6,7,8,9]
# # 删除末尾
# a.pop()
# print(a)

# 根据下标删除元素
# a = [1,2,3,4,5,6,7,8,9]
# a.pop(3)
# print(a)

# 使用 remove ，按照值来进行删除
# a = ['aa','bb','cc','dd']
# a.remove('cc')
# print(a)

# 列表的拼接
# 1. 使用 + 对两个列表进行拼接
# a = [1,2,3,4,5]
# b = [6,7,8,9,10]
# c = a + b
# print(c)
# print(a)
# print(b)

# 2.使用 extend 来进行拼接，
#   这个拼接是把后一个列表的内容拼接到前一个列表
# 直接把 b 的数数据拷贝到 a 上
# a = [1,2,3,4,5]
# b = [6,7,8,9,10]
# a.extend(b)
# print(a)
# print(b)


# 3. 使用 += 来进行拼接
# 赋值，创建临时变量（a = a + b），
# 把临时变量的数据拷贝到a上，把 a 原来的值进行释放
# a = [1,2,3,4,5]
# b = [6,7,8,9,10]
# a += b
# print(a)
# print(b)

# 1.创建元组
# a = ()
# print(type(a))
# b = tuple()
# print(type(b))

# 2. 创建元组时，指定初始值
# a = (1,2,3,4,5,)
# print(a)

# 3. 元组的元素也可以是任意类型的
# a = (1,2,3,'hello',True,[])
# print(a)

# 4. 通过下标来访问元组中的元素，下标是从 0 开始的
# a = (1,2,3,4)
# print(a[1]) # 2
# print(a[-1]) # 4
# # 超出范围，抛异常
# # print(a[100])

# 5. 通过切片来获取元组中的一个部分，左闭右开
# a = (1,2,3,4)
# print(a[1:3])

# 6. 使用for循坏来进行遍历元素
# a = (1,2,3,4,5)
# for elem in a:
#     print(elem)

# 7. 使用 in 来判断元素释放存在，使用 index来查找元素下标
# a = (1,2,3,4,5)
# print(3 in a)
# print(a.index(3))

# # 8. 使用 + 来拼接两个元组
# a = (1,2,3,4,5)
# b = (6,7,8,9,0)
# print(a+b)

# a = []
# print(type(a))
# b = ()
# print(type(b))

# 9. 元组知识支持“读”操作，不能支持“修改”类操作
# a = (1,2,3,4,5)
# # a[0] = 100
# # a.append(6)
# # a.pop(0)
# # a.extend()
# # print(a)

# 10. 当进行多元赋值的时候，其实本质上是按照元组的方式来进行工作的
# def getPoint():
#     x = 10
#     y = 20
#     return x,y
#
# x, y = getPoint()
# print(x,y)
# print(type(getPoint()))

# 字典创建
# 1. 创建字典
# a = {}
# print(type(a))
# b = dict()
# print(type(b))

# 2. 创建字典的同时设置初始值
# key : value
# a = {'id':1, 'name': 'zhangsan'}
# print(a)
# a = {
#     'id' : 1,
#     'name' : 'zhangsan'
# }
# print(a)

# 字典查找 key
# 1. 使用 in 来判定某个 key 是否存在字典中
# a = {
#     'id' : 1,
#     'name' : 'zhangsna',
#     'age' : 22,
# }
# # in 知识判定 key 是否存在 和 value 无关
# print('id' in a) # True
# print('zhangsan' in a) # False
# # not in 来判断 key 在字典中不存在
# print('id' not in a)
# print('classId' not in a)

# 2. 使用 [ ] 来根据 key 获取到 value
# a = {
#     'id' : 1,
#     'name' : 'zhangsna',
#     'age' : 22,
#     100 : 'lisi'
# }
# print(a['id'])
# print(a[100])
# # 不存在 运行异常
# # print(a['classId'])

# # 字典中的增删查改
# # 1. 在字典中新增元素，使用 [ ] 来进行
# a = {
#     'id' : 1,
#     'name' : 'zhangsan'
# }
# # 1.往字典里面插入新的键值对
# a['sorce'] = 90
# print(a)
#
# # 2. 在字典中根据 key 来修改 value , 也是使用 [ ]
# a['sorce'] = 100
# print(a)
# # 若键值存在 则为 对 value值 进行修改
# # 若键值不存在 则为 插入新的键值对
#
# # 3. 使用 pop 方法，根据 key 来删除键值对
# a.pop('name')
# print(a)

# 字典 是 哈希表，进行增删查改的效率非常高
# 而 字典的遍历则效果就要差一些

# 字典的遍历
# 在 C++/Jave 中，哈希表里面的键值对存储的顺序是 无序的！
# # 但是在 Python 中做了特殊的处理，能够保证遍历出来的顺序和插入的顺序一致！
# a = {
#     'id' : 1,
#     'name' : 'zhangsna',
#     'age' : 22,
#     100 : 'lisi'
# }
# # for key in a:
# #     print(key, a[key])
#
# # print(a.keys())
# # print(a.values())
# # print(a.items())
#
# for key, value in a.items():
#     print(key, value)

# 可 哈希 的类型
# 使用 hash 函数能够计算出一个变量的哈希值
# print(hash(0))
# print(hash(3.14))
# print(hash('hello'))
# print(hash(True))
# print(hash((1,2,3)))

# 有的类型是不能计算哈希值的
# print(hash([1,2,3])) # list
# print(hash({ })) # dict

# 不可变的对象，一般是可哈希的
# 可变的对象，一般是不可哈希的（list, dict）







